import { defineNuxtPlugin, useNuxtApp } from 'nuxt/app';
import axios from 'axios';
import { useLoadingStore } from '~/stores/loadingStore.ts'

export default defineNuxtPlugin(nuxtApp => {
    const axiosInstance = axios.create({
        baseURL: 'https://jsonplaceholder.typicode.com/', // 设置你的 API 基础 URL
        timeout: 15000, // 设置超时时间
    });
    axiosInstance.interceptors.request.use(config => {
        // 在发送请求之前做些什么，例如设置 token 等
        // config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`; // 假设使用 token 进行认证
         // 显示loading
    const loadingStore = useLoadingStore()
    loadingStore.showLoading()
        return config;
    }, error => {
        // 对请求错误做些什么
        const loadingStore = useLoadingStore()
    loadingStore.hideLoading()
        return Promise.reject(error);
    });

    axiosInstance.interceptors.response.use(response => {
         const loadingStore = useLoadingStore()
    loadingStore.hideLoading()
        // 对响应数据做点什么，例如处理错误状态码等
        if (response.status === 200) {
            return response.data; // 直接返回数据部分，便于在其他地方使用
        } else {
            // 处理其他状态码的逻辑，例如抛出错误或显示提示信息等
            return Promise.reject(new Error('Something went wrong'));
        }
    }, error => {
         const loadingStore = useLoadingStore()
    loadingStore.hideLoading()
        // 对响应错误做点什么，例如统一处理错误提示等
        console.error('Response error:', error);
        return Promise.reject(error); // 返回错误以便调用者处理错误
    });

    // 将 Axios 实例添加到 Nuxt App 的上下文中，以便在其他地方使用
    nuxtApp.axios = axiosInstance;
});